import json
import requests


class ApiClient:

	def __init__(self, base_url="http://101.126.16.255", token=None):
		"""
		初始化 API 客户端，传入服务器的基础 URL 和认证 token。

		Parameters:
		- base_url (str): 服务器的基础 URL。
		- token (str): 认证 token，默认为 None。
		"""
		self.token = token
		self.base_url = base_url
		self.headers = {
			'Content-Type': 'application/json'
		}

	def get_data(self, endpoint, **kwargs):
		"""
		执行 GET 请求获取数据。

		Parameters:
		- endpoint (str): API 的具体 endpoint。
		- **kwargs: 额外的查询参数。

		Returns:
		- dict or None: 请求成功时返回 JSON 解析后的数据字典，否则返回 None。
		"""
		url = self.base_url + endpoint
		if self.token:
			# 对于 GET 请求，通常将 token 作为查询参数传递
			kwargs['token'] = self.token
		try:
			response = requests.get(url, params=kwargs, headers=self.headers)
			if response.status_code == 200:
				return response.json().get('data', None)  # 尝试获取 'data' 键，如果不存在则返回 None
			else:
				print(f"请求失败: {response.status_code}")
		except requests.exceptions.RequestException as e:
			print(f"请求错误: {e}")
		return None

	def post_data(self, endpoint, data):
		"""
		执行 POST 请求发送数据。

		Parameters:
		- endpoint (str): API 的具体 endpoint。
		- data (dict): 要发送的数据，以字典形式传入。

		Returns:
		- dict or None: 请求成功时返回 JSON 解析后的数据字典，否则返回 None。
		"""
		if self.token:
			url = self.base_url + endpoint+"?token="+self.token
		else:
			url = self.base_url + endpoint
		# 如果服务器期望在请求头中接收 token
		if self.token:
			self.headers['token'] = self.token  # 假设服务器接受这种格式的 token

		try:
			# 注意这里使用 json=data 而不是 data=data
			# json=data 会自动将字典转换为 JSON 字符串，并设置正确的 Content-Type
			# print(self.headers)
			response = requests.post(url, headers=self.headers, json=data)
			if response.status_code == 200:
				return response.json()
			else:
				print(f"请求失败: {response.status_code}")
		except requests.exceptions.RequestException as e:
			print(f"请求错误: {e}")
		return None

# 示例用法


if __name__ == "__main__":
	# data = {"username": "lijiayu", "password": "lijiayu111", "timeout": 36000}
	# res = requests.post("http://101.126.16.255/api/v1/login",data=data)
	# print(res.json())
	# # ac = ApiClient()
	# # #登录获取token
	# # res = ac.post_data(endpoint="/api/v1/login", data=data)
	# # print(res)
	pass